home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 011-020 / amok18 / popup-menu / pop.mod.dok < prev    next >
Text File  |  1993-11-04  |  21KB  |  447 lines

  1. Dokumentation zum Hilfsprogramm 'PopUp-Menüs'.
  2.  
  3. (*---------------------------------------------------------------------------
  4.    :Programm : PopUp-Modul
  5.    :Version  : 2.01 als Modula-2 Hilfsmodule pop.def und pop.mod.
  6.    :Wozu     : Darstellung von PopUp-Menüs auf dem Amiga
  7.    :Bemerkung: Funktion ähnlich Intuition-Menüs.
  8.    :Version  : 1.0, pop.c by Derek Zahn,
  9.                             (Gambit Software, Madison WI) July 1987
  10.    :Version  : 2.0,  1:1  Übersetzung in Modula-2 und
  11.    :Version  : 2.01, bereinigte und geringfügig verbesserte Version von
  12.    :Autor    : Jochen P. Kupfer,
  13.    :Adresse  : Buchenweg 22, D-4006 Erkrath 2,
  14.    :Telefon  : 02104-40673.
  15.    :Zusatz   : SIGMA
  16.    :Datum    : 4/16-Feb-89
  17.    :Copyright: PD
  18.    :Sprache  : Modula-2
  19.    :Compiler : M2Amiga V3.2d
  20. ---------------------------------------------------------------------------*)
  21.  
  22.                DOKUMENTATION zum PopUp-Menü MODULE
  23.                ===================================
  24.  
  25. 0. Einführung:
  26.  
  27. Intuition unterstützt nur Menüs die an der Oberkante des Screens befestigt
  28. sind. Dies ist aber eine unnötige Einschränkung, denn es gibt andere
  29. Windowsysteme (z.B. beim MacIntosh), die 'PopUp-Menüs' unterstüzen. Diese
  30. Menüs können dann irgendwo auf dem Screen erscheinen. Die Hilfsmodule
  31. 'pop.def' und 'pop.mod' bieten dem Amiga-Anwender eine zusätzliche Schnitt-
  32. stelle an, mit der er noch experimentieren kann, und die auch noch
  33. erweiterungsfähig ist. Derek Zahn hat diesen Code (pop.c) im Public Domain
  34. Bereich plaziert, zur weiteren Verwendung, Veränderung und Diskussion. Er
  35. hofft, daß ihn jemand brauchbar findet.
  36.  
  37.  
  38. 1. Besonderheiten:
  39.  
  40. Das Hilfsmodul bietet die Möglichkeit zum Einsatz von PopUp-Menüs unter
  41. Verwendung von Datenstrukturen, ähnlich denen die bei konventionellen
  42. Intuition Menüs verwendet werden. Wie in Abschnitt 3. und 4 deutlicher
  43. wird, wurden einige Flags zu Kontrolle des PopUp-Menüs hinzugefügt, andere
  44. die hier keinen rechten Sinn ergeben, wurden weggelassen. Einige Variablen
  45. der Intuition-Menü-Struktur werden anders verwendet, als dort angegeben.
  46. Ein möglicher Anwender dieses Hilfsmoduls sollte deshalb die Dokumen-
  47. tation genau durchlesen und die Bedeutung der Flags verstehen. Das Demo-
  48. Programm 'popDemo' zeigt einige einfache Anwendungsbeispiele zum besseren
  49. Verständnis.
  50.  
  51. Wie aus Abschnitt 2. hervorgeht, besteht die Schnittstelle aus einer sehr
  52. einfachen Funktion, die die Betätigung einer Maustaste abfängt, und
  53. entsprechend der Wahl des Benutzers, einen bestimmten Wert zurück gibt.
  54. Diese Schnittstelle weicht erheblich vom der normalen Intuition
  55. Schnittstelle ab, die eine Nachricht an den MessagePort schickt.
  56. Der Grund für dieses abweichende Verhalten ist die folgende Tatsache:
  57. Das normale Intuition-Menü ist zu jeder Zeit verfügbar, solange das
  58. ensprechende Window aktiv ist (außer wenn das Menü explizit abgeschaltet
  59. wurde). Dieser Mechanismus ist in Intuition auf einem sehr fundamentalen
  60. Niveau programmiert. Es gibt keine klare, allgemein akzeptierte Methode um
  61. dem Anwenderprogramm die Verantwortung for die Behandlung des 'PopUp-Menüs'
  62. abzunehmen.
  63.  
  64. Derek Zahn wollte ursprünglich einen eigenen Task programmieren, der
  65. ähnlich selbständig funktioniert wie das Intuition-Menü, und den Anwender
  66. über den IDCMP-Port in der Variablen class über des entsprechende popFlag
  67. (popMenuVerify, popMenuHit, etc.) informiert. Das funktionierte jedoch nie
  68. so richtig, deshalb würde Derek eine Diskussion zu diesem Thema begrüßen.
  69.  
  70. Trotz des Fehlens der prozedurmäßigen Ausrichtung auf Intuition (die vor-
  71. liegenden PopUp-Menüs funktionieren mehr wie Autorequester), gibt es genug
  72. Anwendungsmöglichkeiten für die vorliegende Schnittstelle. PopUp-Menüs
  73. könnten beispielsweise in einer Textverarbeitung sehr praktisch zur
  74. Änderung der aktuellen Fonts benutzt werden. Die Verwendung der PopUp-
  75. Menüs erspart dem Anwender sehr viele unnötige Bewegungen mit der Maus.
  76. Sie erspart programmtechnischen Aufwand für Gadgets und der Anwender muß
  77. am Anfang nicht gleich alle möglichen Tastaturbefehle können.
  78.  
  79. PopUp-Menüs verwenden den gleichen MenuItem-RECORD wie Intuition (In C
  80. wird auch die Original-Menu-Struktur verwendet, das geht in Modula-2
  81. nicht.). Die meisten Funktionen der Intuition-Menüs werden von den PopUp-
  82. Menüs in nahezu identischer Art und Weise unterstützt (--> Abschnitt 3./4.).
  83.  
  84. Es gibt jedoch einige wesentliche Abweichungen. Derek findet, daß das
  85. vorliegende Modul noch unvollständig ist. Es gibt weder SubItems noch
  86. mehrere Menüstreifen, noch die Möglichkeit der 'extended selection'.
  87. Zur weiteren Diskussion dieser und anderer Probleme wird auf den Anhang
  88. verwiesen.
  89.  
  90.  
  91. 2. PopChoose()
  92.  
  93. Die Anwender-Schnittstelle wird im Definitions-Modul 'pop.def' wie folgt
  94. beschrieben:
  95.  
  96. TYPE
  97.  popFlags = (menuEnabled,popVerify,popRelease,popTidy,popPointRel,popWinRel,
  98.              popRemember,popUsed,pf8,popMovePointer,pf10,pf11,
  99.              popLeftButton,popRightButton,popTriggerDown,popTriggerUp);
  100.  popFlagSet = SET OF popFlags;
  101.  
  102.  (*
  103.   * Anmerkung zur Modula-2 Version:
  104.   *
  105.   * Die Vereinbarung der Flags sieht in C vollkommen anders aus.
  106.   * Diese Formulierung hier kommt aber m.E. der M2Amiga-Schreibweise
  107.   * am nächsten.
  108.   *)
  109.  
  110. CONST
  111.   PopTitleHeight = 10; (* Wenn Sie im Screen-RECORD größere Fonts verwenden,
  112.                        dann muß dieser Wert in 'ySize+2' geändert werden. *)
  113.  
  114. TYPE
  115.   popMenuPtr  = POINTER TO popMenu;
  116.  
  117.   popMenu     = RECORD
  118.      nextMenu :popMenuPtr; (* Noch nicht implementiert, das könnten Sie tun!*)
  119.      leftEdge :INTEGER;
  120.       topEdge :INTEGER;
  121.         width :INTEGER;
  122.        height :INTEGER;
  123.         flags :popFlagSet;
  124.      menuName :ADDRESS;
  125.     firstItem :MenuItemPtr;
  126.   END;
  127.  
  128. (*
  129.  * Anmerkung zur Modula-2 Version:
  130.  *
  131.  * Anders als in C, mußt hier ein eigener popMenu-RECORD definiert werden,
  132.  * weil der popFlagSet als Variablentyp in diesem Record benötigt wird.
  133.  * Die Variablen jazz... und beat... entfallen.
  134.  *)
  135.  
  136. (*
  137.  * PROCEDURE PopChoose(menPtr:popMenuPtr;winPtr:WindowPtr):LONGINT;
  138.  *
  139.  * menPtr -- Zeiger auf das PopUp-Menü.
  140.  * winPtr -- Zeiger auf das Window zu dem das PupUp-Menü gehört.
  141.  *           winPtr muß #NIL sein, denn es ergibt keinen Sinn, ein PopUp-
  142.  *           Menü für ein nicht vorhandenes Window zu eröffnen.
  143.  *
  144.  * Diese Funktion bringt das PopUp-Menü auf den Screen.  Sie liefert -1
  145.  * zurück, falls entweder ein Fehler beim Aufbau des Menüs passierte,
  146.  * oder der Benutzer keine Auswahl getroffen hat.
  147.  * Wurde ein MenuItem selektiert, dann gibt die Funktion eine Zahl zwischen
  148.  * 0 und n-1 zurück, wobei n die Anzahl der MenuItems ist. Die MenuItems
  149.  * werden also von 0 bis n-1 durchnumeriert.
  150.  *
  151.  * -1 wird auch zurück gegeben, wenn ein Attribut-Item angewählt wurde,
  152.  * der bereits mit einem Häkchen versehen, also schon aktiv, ist.
  153.  *
  154.  * Da mit diesem Hilfsmodul ein eigenes Window eröffnet wird, muß der
  155.  * Programmierer selbst darauf achten, daß keine unzulässigen Dinge
  156.  * passieren, solange die Funktion aktiv ist.
  157.  *)
  158.  
  159. PROCEDURE PopChoose(menPtr:popMenuPtr;winPtr:WindowPtr):LONGINT;
  160.  
  161. In dieser Funktion spezifiziert die Variable 'winPtr' das Window, an das
  162. das PopUp-Menü-Window angehängt wird. Das 'popMenu' auf das der Zeiger
  163. 'menPtr' zeigt, wird im Abschnitt 3./4. genauer beschrieben.
  164.  
  165. Falls ein Fehler auftrat, oder keine gültige Auswahl getroffen wurde, gibt
  166. die Funktion -1 zurück. Wurde ein MenuItem selektiert, dann wird eine
  167. nicht negative Zahl zurück gegeben. Dieser Rückgabewert errechnet sich wie
  168. folgt: Der erste MenuItem hat die Nummer 0, der 2. MenuItem die Nummer 1,
  169. etc. Bei n MenuItems hat der letzte Item die Nummer n-1. Dies ist die
  170. gleiche Auswahlmethode wie bei Intuition.
  171.  
  172. PopChoose() öffnet ein eigenes Window, in das das Menü gezeichnet wird.
  173. Es liegt in der Verantwortung des Programmierers, dafür Sorge zu tragen,
  174. in dieses Fenster nichts geschrieben oder gezeichnet wird.
  175.  
  176.  
  177. 3. Der popMenu-RECORD
  178.  
  179. Seine Definition lautet:
  180.  
  181.   popMenu     = RECORD
  182.      nextMenu :popMenuPtr; (* Noch nicht implementiert, das könnten Sie tun!*)
  183.      leftEdge :INTEGER;
  184.       topEdge :INTEGER;
  185.         width :INTEGER;
  186.        height :INTEGER;
  187.         flags :popFlagSet;
  188.      menuName :ADDRESS;
  189.     firstItem :MenuItemPtr;
  190.   END;
  191.  
  192. Die Bedeutung der Variablen:
  193.  
  194. nextMenu :popMenuPtr; Diese Variable wurde noch nicht verwendet, damit
  195.         könnte man mehrere Menüstreifen aneinander hängen - Sie sehen,
  196.         es bliebe noch einiges zu tun!
  197.  
  198. leftEdge,topEdge:INTEGER; Dies sind die Koordinaten der oberen linken
  199.         Windowecke. Ihr Wert wird durch die Flags popPointRel,
  200.         popWinRel, popTidy und popRemember beeinflußt (--> unten).
  201.  
  202. width,height:INTEGER; Die Bedeutung deser Variablen weicht stark von
  203.         der in Intuition verwendeten ab! Hier stehen Gesamtbreite und
  204.         Gesamthöhe des PopUp-Menüs, d.h. das gesamte PopUp-Menü muß
  205.         in dieses Rechteck passen!
  206.  
  207.  
  208. flags:popFlagSet; Da es in Intuition keine ensprechenden Flags gibt,
  209.         mußten hier eigene definiert werden:
  210.  
  211.         menuEnabled: Ist dieses Flag nicht gesetzt, dann liefert
  212.                 PopChoose() sofort -1 zurück und ist fertig.
  213.  
  214.         popVerify, popRelease und popMovePointer wollte Derek Zahn wohl
  215.                 noch verwenden, sie kommen aber in 'pop.c' und damit
  216.                 auch in 'pop.mod' nicht vor!
  217.  
  218. Als Voreinstellung geben Die Variablen leftEdge und topEdge den absoluten
  219. Offset von der linken oberen Screenecke an. Die folgenden Flags ändern
  220. diese Voreinstellung:
  221.  
  222.         popPointRel: Ist dieses Flag gesetzt, dann geben leftEdge und
  223.                 topEdge den Offset von der Mauszeigerposition an
  224.                 wenn PopChoose() aufgerufen wird.
  225.  
  226.         popWinRel: Ist dieses Flag gesetzt, dann geben leftEdge und
  227.                 topEdge den Offset von der linken oberen Ecke des
  228.                 aufrufenden Windows an. popPointRel hat Priorität
  229.                 über popWinRel, falls beide Flags gesetzt sind.
  230.  
  231.         popRemember: Ist dieses Flag gesetzt, und PopChose() wurde schon
  232.                 einmal aufgerufen, dann werden leftEdge und topEdge so
  233.                 verändert, daß der zuletzt gewählte MenuItem genau unter
  234.                 dem Mauszeiger erscheint. Damit ist dieser Item auch gleich
  235.                 vorgewählt.
  236.  
  237.         popTidy: Ist dieses Flag gesetzt, so garantiert es dafür, daß das
  238.                 gesamte PopUp-Menü auf den Screen paßt, d.h. der Ort an
  239.                 dem es erscheint, wird so verändert, daß kein Teil des Menüs
  240.                 abgeschnitten wird. Die Wirkung der Flags popPointRel,
  241.                 popWinRel und popRemember wird nötigenfalls soweit
  242.                 verändert, daß alle MenuItems auf dem Screen sichtbar sind.
  243.  
  244.         popUsed: Dies ist ein internes Flag, es zeigt an ob beim nächsten
  245.                 Aufruf von PopChoose() das Flag popRemember berücksichtigt
  246.                 werden soll.
  247.  
  248.         Die nächsten Flags legen die Bedingungen fest, wann ein MenuItem
  249.         als selektiert angesehen werden kann. Bitte beachten Sie, daß
  250.         es ***absolut notwendig*** ist eines der popFlags popLeftButton
  251.         oder popRightButton, sowie ***auch*** eines der popFlags
  252.         popTriggerUp oder popTriggerDown zu setzen. Wird diese Bedingung
  253.         nicht eingehalten, dann kehrt das Programm vom Aufruf von
  254.         PopChoose() nie mehr(!) zurück.
  255.  
  256.         popLeftButton: Behandelt den linken Mausknopf als Auslöser für
  257.                 die Wahl des MenuItems. Auch popRightButton kann gleich-
  258.                 zeitig gesetzt sein. Dann wird auch die rechte Maustaste
  259.                 als Auslöser berücksichtigt.
  260.  
  261.         popRightButton: Behandelt den rechten Mausknopf als Auslöser für
  262.                 die Wahl des MenuItems.
  263.  
  264.         popTriggerUp: Sorgt dafür, daß ein MenuItem selektiert ist, wenn
  265.                 der Mausknopf über ihm losgelassen wurde. War der
  266.                 Mauszeiger nicht über einem Item, dann ist auch keiner
  267.                 selektiert. Gleichzeitig kann auch das popFlag
  268.                 popTriggerDown gesetzt sein. In diesem Fall wirken beide.
  269.  
  270.         popTriggerDown: Sorgt dafür, daß ein MenuItem selektiert ist,
  271.                 wenn der Mausknopf über ihm gedrückt wurde. War der
  272.                 Mauszeiger nicht über einem Item, dann ist auch keiner
  273.                 selektiert.
  274.  
  275. menuName:ADDRESS; Die Bedeutung dieser Variablen ist etwas verwirrend,
  276.         da sie auch die Positionierung (in y-Richtung) des PopUp-Menüs
  277.         beeinflußt. Ist diese Adresse=NIL, also kein Titel vorhanden,
  278.         dann stellt der Offset im MenuItem-RECORD den tatsächlichen Offset
  279.         von der linken oberen Ecke des Menüs dar. Ist ein Titel vorhanden,
  280.         dann wird er als Menütitel geschrieben. In diesem Fall wird der
  281.         Wert von PopTitleHeight (aus pop.def) stillschweigend zu dem
  282.         jeweiligen Wert von topEdge im MenuItem-RECORD addiert. Dieses
  283.         etwas verwirrende Verhalten resultiert aus der Option, daß der
  284.         Menütitel auch weggelassen werden darf und gleichzeitig die
  285.         übliche Bedeutung der Intuition-Variablen topEdge beibehalten
  286.         wird.
  287.  
  288. firstItem:MenuItemPtr; Zeiger auf die verkettete Liste der
  289.         MenuItem-RECORDs, die das Menü beschreiben. Diese Liste kann
  290.         auch leer sein.
  291.  
  292.  
  293. 4. Der MenuItem-RECORD
  294.  
  295. Die verwendeten Variablen haben fast die gleiche Besdeutung wie unter
  296. Intuition.
  297.  
  298. nextItem:MenuItemPtr; Zeigt auf den nächsten MenuItem-RECORD in der
  299.         verketteten Liste.
  300.  
  301. leftEdge,topEdge:INTEGER; Enthalten die Koordinaten der linken oberen Ecke
  302.         der Auswahlbox des MenuItems, bezogen auf die linke obere Ecke
  303.         des Menüs. Hat das Menü eine Titelleiste, dann wird der Wert von
  304.         PopTitleHeight stillschweigend zu topEdge addiert. Dies wird sehr
  305.         schnell verständlich, wenn Sie es in der Praxis erproben.
  306.  
  307. width,height:INTEGER; Bestimmen Höhe und Breite der Auswahlbox.
  308.  
  309. flags:MenuItemFlagSet; Funktionieren wie unter Intuition; ausgenommen
  310.         commSeq und isDrawn. Diese beiden Flags wurden nicht verwendet.
  311.  
  312. mutualExclude:LONGSET; Funktioniert genau wie unter Intuition.
  313.         Alle MenuItems, bei denen das Flag checkIt gesetzt wurde,
  314.         können sich gegenseitig auschließen. Wird einer dieser Items
  315.         ausgewählt und hat er kein Häkchen, dann bekommt er das
  316.         Häkchen und bei allen anderen wird es entfernt. Dieser LONGSET
  317.         stellt eine Bitmaske dar, wobei sich jedes Bit auf einen Item
  318.         in der verketteten Liste bezieht. Dem ersten MenuItem entspricht
  319.         das Bit Nr. 0, dem nächsten Item das Bit Nr. 1, etc. Ist das
  320.         ensprechende Bit zu einem MenuItem gesetzt, dann gehört es zur
  321.         gleichen mutualExclude-Gruppe wie der aktuelle Item. Wenn Sie
  322.         einen Item in seiner eigenen mutualExclude-Gruppe plazieren,
  323.         dann kann er niemals selektiert werden. Das wird man normaler-
  324.         weise nicht wollen - aber wer weiß?
  325.  
  326. itemFill,selectFill:ADDRESS; Funktionieren genau wie unter Intuition.
  327.  
  328. command:CHAR; Diese Variable wird ignoriert.
  329.  
  330. subItem:MenuItemPtr; Diese Variable wird ignoriert, d.h. SubItems werden
  331.         z.Z noch nicht unterstützt.
  332.  
  333. nextSelect:CARDINAL; Diese Variable wird ignoriert.
  334.  
  335.  
  336. Zusatzbemerkung zu Verwendung der MenuItemFlags:
  337.  
  338. Es gibt keine PopUp-Menü-spezifischen MenuItemFlags. Deshalb hier eine
  339. Beschreibung der Standardflags und ihre Verwendung im PopUp-Menü.
  340.  
  341. checkIt,checked: Bringen das Häckchen an den MenuItem, genau wie bei
  342.         Intuition. PopChoose() gibt -1 zurück, wenn der Anwender einen
  343.         Item angewählt hat, der bereits vorher selektiert war.
  344.  
  345.         * Die Routine zum Zeichnen des Häkchens habe ich im Programm um
  346.         * einige Zeilen nach Hinten verschoben. Jetzt wird erst der
  347.         * selectFill-Eintrag und dann das Häckchen gezeichnet. Das hat
  348.         * den Vorteil, daß auch ein falsch plaziertes Häkchen noch sichtbar
  349.         * bleibt. Vorher wurde es überschrieben und war deshalb nicht
  350.         * mehr zu sehen. J.
  351.  
  352. highComp,highBox,highItem,highNone: Genau wie unter Intuition bestimmen
  353.         diese Flags die Art der Hervorhebung. Falls kein Alternativ-Item
  354.         bei selectFill angegeben wurde, hat das den gleichen Effekt, als
  355.         wenn highNone gesetzt worden wäre.
  356.  
  357.         * Falls ein Alternativ-Item bei selectFill angegeben war, dann
  358.         * wurden die Flags highComp und highBox in Derek Zahns Version
  359.         * von pop.c ignoriert. Das hatte den unschönen Effekt, daß
  360.         * alternative Texte nicht optisch hervorgehoben werden konnten.
  361.         * Dies habe ich geändert, sodaß jetzt highComp und highBox
  362.         * auch funktionieren wenn selectFill#NIL ist. J.
  363.  
  364. itemText: Funktioniert identisch zu Intuition.
  365.  
  366. itemEnabled: Ist dieses Flag nicht gesetzt, dann wird der Item
  367.         'unscharf' gezeichnet und kann nicht selektiert werden.
  368.         PopChoose() gibt -1 zurück, wenn versucht wird diesen
  369.         Item zu selektieren.
  370.  
  371. isDrawn,commSeq: Werden nicht verwendet.
  372.  
  373.  
  374. Zum Anhang,Probleme vermerkt Derek Zahn:
  375.  
  376. Das Modul ist bei weitem noch nicht perfekt, wenn ich auch zugebe,
  377. daß ich leider nicht in der Lage war, entweder bessere Lösungen
  378. der Probleme anzubieten die mich etwas nervös machen; oder für eine
  379. einfachere Implementation der noch fehlenden Funktionen zu sorgen.
  380. Dieser Anhang soll etwas zur Verdeutlichung der Bedenken beitragen,
  381. mit denen ich diesen Beitrag der Gemeinschaft der Amiga-Freunde zur
  382. weiteren Verwendung überlasse.
  383.  
  384. Erstens ist da die Inkonsistenz der Benutzerschnittstelle: Obgleich ich
  385. immer noch der Meinung bin, daß die Konsistenz die Benutzung des Intuition-
  386. Message-Systems verlangt, scheint das vorliegende Konzept doch in fast
  387. allen vorstellbaren Ungebungen zu funktionieren. Tatsächlich erscheint
  388. es einfacher PopChoose() so zu verwenden, wie es jetzt ist. Verbesserungs-
  389. vorschläge oder Erweiterungen der bestehenden Schnittstelle würde ich
  390. jederzeit begrüßen.
  391.  
  392. Zweitens, die popRemember-Geschichte macht mich etwas nervös; die Werte von
  393. leftEdge und TopEdge damit zu ändern, das sieht wie ein Trick aus.
  394.  
  395. Drittens, die Art in der der optionale Menütitel behandelt wird, sieht
  396. etwas merkwürdig aus. Wenn man die Offsets der MenuItems vergrößert, dann
  397. sollte man die Größe des Windows auch entsprechend anpassen. Aber ich
  398. konnte mich nicht dazu durchringen, die Windowhöhe auch noch anzupassen.
  399.  
  400. Viertens, könnte der Source-Code vermutlich noch verbessert werden. Zu oft
  401. wird die Liste der MenuItems durch gegangen, da könnte immer noch ein
  402. Fehler auftauchen?
  403.  
  404. Fünftens, fehlen noch einige wesentliche Funktionen: SubItems und
  405. nextSelect. Die Tataturbefehle fehlen vollständig; mir ist aber völlig
  406. unklar, wie das gehen könnte.
  407.  
  408. Sechstens, Fehler: Es gibt zwei, von denen Derek weiß:
  409. 1. Obwohl der Fall des fehlenden popTidy-Flags unterstützt wird; das
  410.    PopUp-Menü erscheint nicht, wenn die Screen-Grenzen verletzt werden;
  411.    bin ich mir nicht so sicher, was unter Kickstart 1.1 dann passiert.
  412.    .... Sorry Derek, I coudn't exactly follow your remarks here...
  413.  
  414. 2. Es kann passieren, daß der Anwender den Menü-Request durch Mausklick
  415.    beendet, bevor das Menü gezeichnet wurde. In diesem Fall wird die Menü-
  416.    auswahl nicht bemerkt und muß wiederholt werden. Dies könnte ich
  417.    abfangen, wenn ich herausfinden könnte, wie man den Zustand der Maus-
  418.    tasten sofort nach dem Öffnen des Windows abfragt.
  419.  
  420.  
  421. Nachbemerkung des Übersetzers:
  422. ==============================
  423.  
  424. In pop.c verlangt Derek ausdrücklich, das ein explizite Zeiger auf
  425. IntuitionBase und GraphicsBase existieren. Das macht zumindest für den
  426. M2Amiga-Compiler keinen Sinn, der öffnet und schließt seine Libraries
  427. selbständig. Auch die ürsprünglich zulässige Angabe winPtr:=NIL, mit der
  428. Maßgabe, daß sich dann das PopUp-Menü an das (zufällig) gerade aktive
  429. Fenster anhängt, ergibt für mich keinen Sinn. Ich habe es probiert, die
  430. Ergebisse waren fast immer katastrophal. Deshalb habe ich dafür gesorgt,
  431. daß PopChoose() sofort mit -1 zurückkehrt, falls menPtr oder winPtr gleich
  432. NIL sind.
  433.  
  434. Die Files pop.def und pop.mod wurden mit dem M2Amiga-Compiler Version 3.2
  435. kompiliert, deshalb können pop.sym und pop.obj nicht zusammen mit der
  436. Demo-Version des M2Amiga verwendet werden (die Version 3.2 erzeugt einen
  437. anderen Schlüssel im .sym-File). Damit Benutzer der Demo-Version des
  438. M2Amiga aber trotzdem dieses PopUp-Menü verwenden können, habe ich pop.def
  439. und pop.mod (in einer leicht geänderten Version) unter 3.11 kompiliert
  440. und die entsprechenden Files pop.sym und pop.obj im Ordner 'Demo-Version'
  441. abgelegt.
  442.  
  443.         Viel Spaß mit dieser zusätzlichen Window-Option!
  444.  
  445.                             Jochen SIGMA für A.I.T. (16-2-89)
  446.  
  447.